package main

import "fmt"

func main() {
	var s []int
	fmt.Println(s)
	// 与数组不同，slice的类型由它所包含的元素决定（不需要元素的个数）
	//要创建一个长度为非0的空slice,需要使用内建的方法 make
	t := make([]string, 3)
	fmt.Println(t)
	t[0] = "zhangsan"
	t[1] = "lisi"
	t[2] = "wangwu"
	fmt.Println("slice t value = ", t)
	fmt.Println("get slice t[1] value=", t[1])
	//返回slice长度
	fmt.Println("slice value length = ", len(t))
	//t[3] = "zhaoliu" //报错超出范围的值

	t = append(t, "nanfeng")
	t = append(t, "lanting", "mingquan")
	fmt.Println("append slice = ", t)

	//slice可以被copy 相同长度将t复制给x
	x := make([]string, len(t))
	copy(x, t)
	fmt.Println("copy", x)

	//slice支持数组切片，slice[low,high],获取t[2],t[3],t[4]的值
	l := t[2:5]
	fmt.Println(l)

	// 不包括t[5]
	m := t[:5]
	fmt.Println(m)

	//从t[2]开始切片，包括t2
	n := t[2:]
	fmt.Println(n)

	//声明并初始化一个slice变量
	y := []string{"nanfeng", "mingquan", "469688010"}
	fmt.Println(y, len(y))

	twoD := make([][]int, 3)
	for i := 0; i < 3; i++ {
		innerLen := i + 1
		twoD[i] = make([]int, innerLen)
		for j := 0; j < innerLen; j++ {
			twoD[i][j] = i + j
		}
	}
	fmt.Println(twoD)
}
